package leetcode_jz_offer.day3_string;

/**
 * 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
 * 请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
 **/

/**
 * 三步翻转法：逆序左边、逆序右边、整体逆序
 * 细节：只有三个字符abc，左旋四次：bca(重复回到开头了)，相当于左旋一次：n%= ch.length;
 */
public class Num58_StringLeftMove {
    public String reverseLeftWords(String s, int n) {
        //字符串转为字符数组
        char[] array=s.toCharArray();
        if(s==null||n<0){
            return null;
        }
        n=n%array.length;//左旋次数
        array=reverse(array,0,n-1);
        array=reverse(array,n,array.length-1);
        array=reverse(array,0,array.length-1);
        return String.copyValueOf(array);//字符数组-》字符串

    }
    private char[] reverse(char[] array, int left, int right) {
        while (left<right){
            char temp=array[left];
            array[left]=array[right];
            array[right]=temp;
            left++;
            right--;
        }
        return array;
    }
}
